import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;

public class question_90 {
}

class solution_90 {
    //先写一个方法用来计算一个数的n次方
    int caculate(int n,int m){
        if(m==0)
            return 1;
        return n*caculate(n,m-1);
    }

    public List<List<Integer>> subsetsWithDup(int[] nums) {
        Arrays.sort(nums);
        List<List<Integer>> result=new ArrayList<>();
        int sum=caculate(2,nums.length);//计算总共有多少总可能
        for (int i = 0; i < sum; i++) {
            int j=0;
            int k=i;
            List<Integer> l=new ArrayList<>();
            while(k!=0){
                int temp=k%2;
                if(temp==1){
                    l.add(nums[j]);
                }
                k=k/2;
                j++;
            }
            result.add(l);
        }
        HashSet<List<Integer>> set=new HashSet<>(result);
        return new ArrayList<>(set);
    }

}